package com.hu.common.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hu.common.common.HttpStatus;
import com.hu.common.pojo.dto.QueryInfo;
import com.hu.common.pojo.dto.Response;
import com.hu.common.pojo.dto.TableDataInfo;
import com.hu.common.utils.ServletUtils;
import com.hu.common.utils.StringUtils;

import java.util.List;


/**
 * 响应结果类
 */
public class BaseController {

    protected void startPage(QueryInfo queryInfo) {
        //获取获取当前记录起始索引pageNumber、每页显示记录数pageSize
        Integer pageNumber = queryInfo.getPageNumber();
        Integer pageSize = queryInfo.getPageSize();
        if (pageNumber != null && StringUtils.isNotNull(pageNumber) && StringUtils.isNotNull(pageSize)) {
            PageHelper.startPage(pageNumber, pageSize, null);
        }
    }

    protected void startPage(Integer pageNumber, Integer pageSize) {
        //获取获取当前记录起始索引pageNumber、每页显示记录数pageSize
        if (pageNumber != null && StringUtils.isNotNull(pageNumber) && StringUtils.isNotNull(pageSize)) {
            PageHelper.startPage(pageNumber, pageSize, null);
        }
    }

    /**
     * 响应请求分页数据
     */
    @SuppressWarnings({"rawtypes", "unchecked"})
    protected TableDataInfo getDataTable(List<?> list) {
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setMsg("查询成功");
        rspData.setData(list);

        if (ServletUtils.getParameterToInt("pageNumber") != null) {
            rspData.setCurrent(ServletUtils.getParameterToInt("pageNumber"));
        } else {
            rspData.setCurrent(1);
        }
        rspData.setTotal(new PageInfo(list).getTotal());
        return rspData;
    }

    /**
     * 响应返回结果
     *
     * @param rows 影响行数
     * @return 操作结果
     */
    protected Response handleRows(int rows) {
        return rows > 0 ? success() : error();
    }

    /**
     * 响应返回结果
     *
     * @param id id
     * @return 操作结果
     */
    protected Response handleId(long id) {
        return id > 0 ? success(id) : error();
    }

    /**
     * 响应返回结果
     *
     * @param id id
     * @return 操作结果
     */
    protected Response handleId(int id) {
        return id > 0 ? success() : error();
    }

    protected Response handleRows(int rows, String msg) {
        return rows > 0 ? success(msg) : error();
    }

    /**
     * 响应返回结果
     *
     * @param obj 返回对象
     * @return 操作结果
     */
    protected Response handleObject(Object obj) {
        return null != obj ? success(obj) : error();
    }

    /**
     * 响应返回结果
     *
     * @param result 结果
     * @return 操作结果
     */
    protected Response handleBoolean(boolean result) {
        return result ? success() : error();
    }


    /**
     * 返回成功：无参
     */
    public Response success() {
        return Response.success();
    }

    /**
     * 返回成功消息：msg
     */
    public Response success(String message) {
        return Response.success(message);
    }

    /**
     * 返回成功消息：code + msg
     */
    public Response success(Integer code, String message) {
        return Response.success(code, message);
    }

    /**
     * 返回成功消息：obj
     */
    public Response success(Object obj) {
        return Response.success(obj);
    }

    /**
     * 返回成功消息：msg + obj
     */
    public Response success(String msg, Object obj) {
        return Response.success(msg, obj);
    }


    /**
     * 返回失败消息：无参构造器
     */
    public Response error() {
        return Response.error();
    }

    /**
     * 返回失败消息：msg
     */
    public Response error(String message) {
        return Response.error(message);
    }

    /**
     * 返回失败消息：code + msg
     */
    public Response error(Integer code, String message) {
        return Response.error(code, message);
    }

    /**
     * 返回维护消息
     */
    public Response maintain() {
        return Response.error("抱歉，接口维护中");
    }

}

